package com.tte.common.schedule;

import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

import static java.util.concurrent.TimeUnit.SECONDS;

/**
 * ScheduleAtFixedRateTest
 */
public class ScheduleAtFixedRateTest {
    static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

    //前任务执行时间小于间隔时间，每次到点即执行；
    //当前任务执行时间大于等于间隔时间，任务执行后立即执行下一次任务。相当于连续执行了
    public static void main(String[] args) {
        scheduler.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                System.out.println("Start: scheduleAtFixedRate:    " + new Date());
                try {
                    //任务执行时间（8s）小于间隔时间(10s)
                    Thread.sleep(8000);
                    //当前任务执行时间大于等于间隔时间，任务执行后立即执行下一次任务。相当于连续执行了

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("End  : scheduleAtFixedRate:    " + new Date());
            }
        }, 0, 3 , SECONDS);
    }

    //每当上次任务执行完毕后，间隔一段时间执行。不管当前任务执行时间大于、等于还是小于间隔时间，执行效果都是一样的。
//    public static void main(String[] args) {
//        scheduler.scheduleWithFixedDelay(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println("Start: scheduleWithFixedDelay: " + new Date());
//                try {
//                    Thread.sleep(12000);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//                System.out.println("End  : scheduleWithFixedDelay: " + new Date());
//            }
//        }, 0, 10 , SECONDS);
//    }
}
